<%-- 
    Document   : Procesar_Index
    Created on : 21-nov-2013, 12:51:43
    Author     : Javi
--%>

<%@page import="GestorBDatos.Usuario"%>
<%@page import="java.util.GregorianCalendar"%>
<%@page import="GestorBDatos.UsuarioJpaController.ComprobacionLogin"%>
<%@page import="javax.persistence.Persistence"%>
<%@page import="javax.persistence.EntityManagerFactory"%>
<%@page import="GestorBDatos.UsuarioJpaController"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>

    <body>
        <table>
            <tr>
                <td>Seguridad Informatica</td>
            </tr>
        </table>
        <p> </p>
        <%
            long espera = 2;
            int maximo_intentos = 5;

            String login = request.getParameter("usuario");
            String password = request.getParameter("passwd");

            if (login != null && !login.equals("")
                    && password != null && !password.equals("")) {
                
                EntityManagerFactory emf = Persistence.createEntityManagerFactory("Seguridad_InformaticaPU");
                UsuarioJpaController usu = new UsuarioJpaController(emf);
                HttpSession sesion = request.getSession();
                Usuario usuario = usu.findUsuario(login);
                ComprobacionLogin resultado = usu.comprobarLogin(login, password);

                if (usuario != null) {
                        if (usuario.getHoraPrimerIntento() != null) {
                            GregorianCalendar horaActual = new GregorianCalendar();
                            GregorianCalendar horaPrimerIntento = new GregorianCalendar();
                            horaPrimerIntento.setTime(usuario.getHoraPrimerIntento());
                            long diff = horaActual.getTimeInMillis() - horaPrimerIntento.getTimeInMillis();
                            long diffMin = diff / (60 * 1000);

                            if (diffMin < espera) {
                                usuario.setIntentosAutentificacion(0);
                                usu.edit(usuario);
                                response.sendRedirect("index.jsp?error=4&diffMin=" + diffMin);
                            } else {
                                switch (resultado) {
                                    case CORRECTO_USUARIO:
                                        sesion.setAttribute("Login", login);
                                        usuario.setIntentosAutentificacion(0);
                                        usuario.setHoraPrimerIntento(null);
                                        usu.edit(usuario);
                                        response.sendRedirect("Pantalla_Datos_User.jsp");
                                        break;
                                    case CORRECTO_ADMIN:
                                        sesion.setAttribute("Login", login);
                                        usuario.setIntentosAutentificacion(0);
                                        usuario.setHoraPrimerIntento(null);
                                        usu.edit(usuario);
                                        response.sendRedirect("Pantalla_Dar_De_Alta_Admin.jsp");
                                        break;
                                    case SIN_ALTA:
                                        response.sendRedirect("index.jsp?error=6");
                                        break;
                                    case INCORRECTO:
                                        int intentos = usuario.getIntentosAutentificacion();
                                        if (intentos + 1 < maximo_intentos) {
                                            intentos += 1;
                                            usuario.setIntentosAutentificacion(intentos);
                                            usu.edit(usuario);
                                            response.sendRedirect("index.jsp?error=1&intentos=" + intentos);
                                        } else if (intentos + 1 == maximo_intentos) {
                                            usuario.setHoraPrimerIntento(horaActual.getTime());
                                            usu.edit(usuario);
                                            response.sendRedirect("index.jsp?error=4&diffMin=" + 0);
                                        }
                                        break;
                                }
                            }
                        } else {
                            switch (resultado) {
                                case CORRECTO_USUARIO:
                                    sesion.setAttribute("Login", login);
                                    usuario.setIntentosAutentificacion(0);
                                    usuario.setHoraPrimerIntento(null);
                                    usu.edit(usuario);
                                    response.sendRedirect("Pantalla_Datos_User.jsp");
                                    break;
                                case CORRECTO_ADMIN:
                                    sesion.setAttribute("Login", login);
                                    usuario.setIntentosAutentificacion(0);
                                    usuario.setHoraPrimerIntento(null);
                                    usu.edit(usuario);
                                    response.sendRedirect("Pantalla_Dar_De_Alta_Admin.jsp");
                                    break;
                                case SIN_ALTA:
                                    response.sendRedirect("index.jsp?error=6");
                                    break;
                                case INCORRECTO:
                                    int intentos = usuario.getIntentosAutentificacion();
                                    if (intentos + 1 < maximo_intentos) {
                                        intentos += 1;
                                        usuario.setIntentosAutentificacion(intentos);
                                        usu.edit(usuario);
                                        response.sendRedirect("index.jsp?error=1&intentos=" + intentos);
                                    } else if (intentos + 1 == maximo_intentos) {
                                        GregorianCalendar horaPrimerIntento = new GregorianCalendar();
                                        usuario.setHoraPrimerIntento(horaPrimerIntento.getTime());
                                        usu.edit(usuario);
                                        response.sendRedirect("index.jsp?error=4&diffMin=" + 0);
                                    }
                                    break;
                            }
                        }
                    } else {
                     response.sendRedirect("index.jsp?error=5");
                }
                
            } else {
                response.sendRedirect("index.jsp?error=2");
            }
            
        %>
    </body>
</html>

